/**
************************************************************************************************
* @file   		tcp_demo.c
* @author  		WIZnet Software Team 
* @version 		V1.0
* @date    		2015-02-14
* @brief   		TCP 演示函数
* @attention  
************************************************************************************************
**/

#include <stdio.h>
#include <string.h>
#include "tcp_demo.h"

static uint8_t Internet_Buffer[2048];       /*定义一个2KB的缓存*/

/**
*@brief		TCP Server回环演示函数。
*@param		无
*@return	无
*/
void do_tcp_server(void)
{	
	uint16_t len=0;

	/*获取socket的状态*/
	switch(getSn_SR(SOCK_TCPS))
	{
	case SOCK_CLOSED:/*socket处于关闭状态*/
		socket(SOCK_TCPS ,Sn_MR_TCP,WHT_W5500_Config_Info.local_port,Sn_MR_ND);  /*打开socket*/
		break;
	case SOCK_INIT:/*socket已初始化状态*/
		listen(SOCK_TCPS);                      /*socket建立监听*/
	  	break;
	case SOCK_ESTABLISHED:/*socket处于连接建立状态*/	
		if(getSn_IR(SOCK_TCPS) &Sn_IR_CON)
		{
			setSn_IR(SOCK_TCPS, Sn_IR_CON);     /*清除接收中断标志位*/
		}
		len=getSn_RX_RSR(SOCK_TCPS);            /*定义len为已接收数据的长度*/
		if(len>0)
		{
			recv(SOCK_TCPS, Internet_Buffer,len);           /*接收来自Client的数据*/
			Internet_Buffer[len]=0x00;                     /*添加字符串结束符*/
			printf("%s\r\n", Internet_Buffer);
			send(SOCK_TCPS, Internet_Buffer,len);           /*向Client发送数据*/
		}
		break;
	case SOCK_CLOSE_WAIT:/*socket处于等待关闭状态*/
		close(SOCK_TCPS);
		break;
	}
}

/**
*@brief		TCP Client回环演示函数。
*@param		无
*@return	无
*/
void do_tcp_client(void)
{	
    uint16_t len=0;	

	/*获取socket的状态*/
	switch(getSn_SR(SOCK_TCPC))
	{
	case SOCK_CLOSED:   /*socket处于关闭状态*/
		socket(SOCK_TCPC,Sn_MR_TCP,WHT_W5500_Config_Info.local_port++,Sn_MR_ND);
		break;
	case SOCK_INIT:     /*socket处于初始化状态*/
		connect(SOCK_TCPC,WHT_W5500_Config_Info.rip,WHT_W5500_Config_Info.remote_port); /*socket连接服务器*/ 
		break;
	case SOCK_ESTABLISHED:/*socket处于连接建立状态*/
		if(getSn_IR(SOCK_TCPC) & Sn_IR_CON)
		{
			setSn_IR(SOCK_TCPC, Sn_IR_CON);    /*清除接收中断标志位*/
		}
		len = getSn_RX_RSR(SOCK_TCPC);         /*定义len为已接收数据的长度*/
		if(len > 0)
		{
			recv(SOCK_TCPC, Internet_Buffer,len);         /*接收来自Server的数据*/
			Internet_Buffer[len] = 0x00;                  /*添加字符串结束符*/
			printf("%s\r\n", Internet_Buffer);
			send(SOCK_TCPC, Internet_Buffer, len);        /*向Server发送数据*/
		}   
		break;	
	case SOCK_CLOSE_WAIT:/*socket处于等待关闭状态*/
		close(SOCK_TCPC);
		break;
	}
}
